package csu.softwaremetric.controller;

import com.alibaba.fastjson.JSONObject;

import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class FunctionAnalyzerController {


    //第一个页面，前端传来EI、EO、EQ、EIF、ILF中简单、中等、复杂三个等级的数量，后端计算UFC返回给前端
    @PostMapping(value = "/calculateUFC")
    public JSONObject calculateUFC(@RequestBody JSONObject json) {
        JSONObject ob = new JSONObject();

        // Calculate UFC
        int UFC = 3 * json.getIntValue("EISimple") + 4 * json.getIntValue("EIAve") + 6 * json.getIntValue("EIComplex")
                + 4 * json.getIntValue("EOSimple") + 5 * json.getIntValue("EOAve") + 7 * json.getIntValue("EOComplex")
                + 3 * json.getIntValue("EQSimple") + 4 * json.getIntValue("EQAve") + 6 * json.getIntValue("EQComplex")
                + 5 * json.getIntValue("EIFSimple") + 7 * json.getIntValue("EIFAve") + 10 * json.getIntValue("EIFComplex")
                + 7 * json.getIntValue("ILFSimple") + 10 * json.getIntValue("ILFAve") + 15 * json.getIntValue("ILFComplex");
        ob.put("STATUS", "SUCCESS");
        ob.put("MSG", "成功");
        ob.put("UFC", UFC);

        return ob;
    }

    //第二个页面，前端传来各个影响因素的影响度（0-5），后端计算出VAF后返回给前端
    @PostMapping(value = "/calculateVAF")
    public JSONObject calculateVAF(@RequestBody JSONObject json){
        JSONObject ob = new JSONObject();

        double VAF;
        VAF = 0.65 + 0.01 * (json.getIntValue("F1") + json.getIntValue("F2") + json.getIntValue("F3") + json.getIntValue("F4") + json.getIntValue("F5") + json.getIntValue("F6")
                + json.getIntValue("F7") + json.getIntValue("F8") + json.getIntValue("F9") + json.getIntValue("F10") + json.getIntValue("F11") + json.getIntValue("F12") + json.getIntValue("F13") + json.getIntValue("F14"));
        ob.put("STATUS", "SUCCESS");
        ob.put("MSG", "成功");
        ob.put("VAF", VAF);

        return ob;
    }

    //第三个页面，后端通过前面计算出来的UFC和VAF计算出FP返回给前端
    @PostMapping(value = "/calculateFP")
    public JSONObject calculateFP(@RequestBody JSONObject json) {
        double FP;
        JSONObject ob = new JSONObject();
        int ufc = json.getIntValue("UFC");
        double vaf = json.getDoubleValue("VAF");
        try {
            FP = ufc * vaf;
            ob.put("STATUS", "SUCCESS");
            ob.put("MSG", "成功");
            ob.put("FP", FP);

            return ob;
        } catch (Exception e) {
            e.printStackTrace();
            ob.put("STATUS", "Failure");
            ob.put("MSG", "失败");
            return ob;
        }
    }
}
